package com.crm.service.orderManager;

import com.crm.model.entity.customerManager.CustomerProductDetail;
import com.crm.model.entity.orderManager.CustomerProductOrderDetail;
import com.crm.model.vo.customerManager.CustomerOrderBfhkVO;
import com.crm.model.vo.orderManager.OrderActivityVO;
import com.crm.model.vo.orderManager.OrderDetailDelVO;
import com.crm.model.vo.returnMoney.FinanceProductVO;
import com.crm.model.vo.sendRoyaltyManager.SendRoyaltyProductVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * @ Author ：pym
 * @ Date   ：2021/3/17 14:38
 */
public interface CustomerProductOrderDetailDbService {
    /**
     * 根据产品订单表主键和订单明细类型查询产品订单明细列表
     * @Author pym
     * @Date  2021/3/17 14:45
     * @param productOrderId -产品订单表主键
     * @param productOrderDetailType -订单明细类型--1:产品类型;2:活动类型;3:赠品活动类型
     * @return {@link {java.util.List<com.crm.model.entity.orderManager.CustomerProductOrderDetail>}}
     */
    List<CustomerProductOrderDetail> selectCustomerProductOrderDetailList(String productOrderId, String productOrderDetailType);

    /**
     * 插入产品订单明细表
     * @param customerProductOrderDetail 产品订单明细
     * @return
     */
    Boolean insertCustomerProductOrderDetail(CustomerProductOrderDetail customerProductOrderDetail);


    /**
     * 删除订单产品
     * @param delVo
     */
    void delOrderDetail(OrderDetailDelVO delVo);

    /**
     * 根据订单标号查询退款记录
     * @return
     */
    List<OrderDetailDelVO> getDelOrderProductLogList(String orderId);

    /**
     * 根据类型查询订单产品
     * @param productOrderId
     * @param type
     * @return
     */
    List<FinanceProductVO> getOrderProductList(String productOrderId, Integer type);

    /**
     * 根據訂單id獲取訂單產品和活動信息
     * @param productOrderId
     * @return
     */
    List<SendRoyaltyProductVO> financeOrderProductAndActivity(String productOrderId, Integer type);

    /**
     * 获取订单产品、活动数量
     * @param productOrderId
     * @return
     */
    Integer getOrderProductNum(String productOrderId);

    /**
     * 通过产品明细id查询产品信息
     * @param productOrderDetailId 产品明细id
     * @return
     */
    CustomerProductOrderDetail getCustomerProductOrderDetailById(String productOrderDetailId);

    /**
     * 修改产品明细的产品状态为退款
     * @param customerProductOrderDetail 产品明细类
     * @return
     */
    Boolean updateCustomerProductOrderDetail(CustomerProductOrderDetail customerProductOrderDetail);

    /**
     * 通过订单id查询订单明细表
     * @param productOrderId 订单id
     * @param productOrderDetailType 订单明细类型--1:产品类型;2:活动类型;3:赠品活动类型
     * @return
     */
    List<CustomerProductOrderDetail> getOrderDetailList(String productOrderId,String productOrderDetailType);

    /**
     * 查询活动产品数量
     * @param orderDetailId
     * @return
     */
    OrderActivityVO selectActivityProductCount(String orderDetailId);

    /**
     * 通过订单id查询部分回款订单下的产品
     * @param productOrderId 订单id
     * @return
     */
    List<CustomerOrderBfhkVO> selectCustomerOrderBfhkVOList(String productOrderId);

    /**
     * 通过订单产品明细id查询订单明细信息
     * @param productOrderDetailId
     * @return
     */
    CustomerProductOrderDetail selectProductOrderDetailList(String productOrderDetailId);

    /**
     * 通过订单id、产品id、产品类型查询
     * @param productOrderId
     * @param orderRelationId
     * @param productOrderDetailType
     * @return
     */
    CustomerProductOrderDetail selectProductOrderDetailByOrderIdAndProductId(String productOrderId, String orderRelationId, String productOrderDetailType);

    Integer selectOrderProductCount(String orderId);
}
